#ifndef INCLUDE_SENSEID_IDS_API_DEFINE_H_
#define INCLUDE_SENSEID_IDS_API_DEFINE_H_

#ifndef SENSEID_IDS_PUBLIC
#ifdef __cplusplus
#define SENSEID_IDS_PUBLIC extern "C"
#else
#define SENSEID_IDS_PUBLIC
#endif
#endif

#define SENSEID_MAKE_FOURCC(a, b, c, d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))

///
/// 检测对象 ID
///
typedef enum senseid_label_id_e {
  /** 身份证正面(人像面) */
  SENSEID_LABEL_ID_CARD_FRONT = 1,
  /** 身份证反面(国徽面) */
  SENSEID_LABEL_ID_CARD_BACK = 2,
  /** 身份证双面 */
  SENSEID_LABEL_ID_CARD_BOTH_SIDES = 3,
  /** 人脸 */
  SENSEID_LABEL_FACE = 10,
  /** 银行卡 */
  SENSEID_LABEL_BANK_CARD = 20,
} senseid_label_id_e;

///
/// 2D 区域
///
typedef struct senseid_area2d_t {
  /** X 轴起始点 */
  int left;
  /** Y 轴起始点 */
  int top;
  /** 宽 */
  int width;
  /** 高 */
  int height;
} senseid_area2d_t;

///
/// 图像数据格式
///
typedef enum senseid_video_format_e {
  /** BGRA pixel format */
  SENSEID_VIDEO_BGRA = SENSEID_MAKE_FOURCC('B', 'G', 'R', 'A'),
  /** NV21 pixel format */
  SENSEID_VIDEO_NV21 = SENSEID_MAKE_FOURCC('N', 'V', '2', '1'),
} senseid_video_format_e;

///
/// 图像方向
///
typedef enum senseid_orientation_e {
  /** 顺时针 0 度 */
  SENSEID_CLOCKWISE_0,
  /** 顺时针 90 度 */
  SENSEID_CLOCKWISE_90,
  /** 顺时针 180 度 */
  SENSEID_CLOCKWISE_180,
  /** 顺时针 270 度 */
  SENSEID_CLOCKWISE_270
} senseid_orientation_e;

///
/// 图像帧
///
typedef struct senseid_frame_t {
  /** 图像数据格式 */
  senseid_video_format_e format;
  /** 图像数据 */
  const unsigned char* data;
  /** 图像宽 */
  int width;
  /** 图像高 */
  int height;
  /** 图像行跨度 */
  int stride[4];
  /** 图像方向 (如设置非 SENSEID_CLOCKWISE_0，则会反向转正，即设置 SENSEID_CLOCKWISE_90，则会逆时针旋转 90 度) */
  senseid_orientation_e orientation;
  /** 图像是否镜像 */
  bool is_mirror;
  /** 目标限制区域 */
  senseid_area2d_t target_restrict_area;
} senseid_frame_t;

///
/// 更新消息
///
typedef struct senseid_message_t {
  /** 当前动作 */
  int action_type;

  /** 打光颜色(RGB 颜色值), 为负数则不做打光处理. */
  int light_color;
} senseid_message_t;

#endif  // INCLUDE_SENSEID_IDS_API_DEFINE_H_
